<?php  
/*
Контроллер модуля. 

Унаследован от шаблона контроллеров модулей 
Вызывает свою модель 
Вызывает свое представление

Генерит хтмл или ошибку 
*/
 defined('MODUL') ||
  define('MODUL','News');
 
require_once $_SERVER['DOCUMENT_ROOT']."/Moduls/".MODUL."/".MODUL.".php"; 
require_once $_SERVER['DOCUMENT_ROOT']."/Moduls/".MODUL."/view.".MODUL.".php"; 
 
// контроллер вызывает модель, затем представление 
// и формирует output, а также массив входных данных для виджетов array('widget_descriptor'=>array('param_name'=>param_value)) 

   
 
class NewsModul extends BasicModulController implements BasicModulControllerInterface {
// контроллер модуля

  

   // private $widget_inputdata_arr; // перенести в интерфейс BasicModulController

    function __construct($registry = null){
      
      $this->registry = $registry; 
      
      if($this->getURIarg(1)){
        //echo $this->getURIarg(1);
      }
      
      parent::__construct();
      
      // die(var_dump($this->action));
        
      //var_dump($this->action);
      if(isset($this->registry) AND ($this->registry->get('virtual_modul_index')) != '')
         $this->life_modul_index = $this->registry->get('virtual_modul_index'); 
      elseif(isset($this->registry) AND ($this->registry->get('modul_index')) != '')   
        $this->life_modul_index = $this->registry->get('modul_index'); 
       
      // $this->life_modul_index // 'about' 
      $this->modul_index = $this->registry->get('modul_index'); // 'News'
       
      // виджеты 
      $this->widget_enter_data = array();
      $this->widget_enter_data['widget'] = array('1'=>'a'); //var_dump($this->widget_enter_data);
      
      // инициализация модели
      $this->model = new News; // [!] подставлять переменную с именем модуля
      
      // инициализация представления
      $class_name = $this->modul_index . "View";
      
      $ModulView = new $class_name; // [!] подставлять переменную с именем можудя
      $this->global_view = $ModulView->getView(); // глобальное представление
      $this->view = $ModulView; // представление модуля
      
      // установка переменных, полученных из модели
      //$this->view->Set('asd',1234);
      
      self::$instance = $this;
      
      // генерация html
      // [!] закоментить после запуска Фабрики
      //$this->html = $this->view->render();
      
      // Меню слева       
      // TODO вынести в ролителя
      $this->sections_arr = $this->getSections();  
      
      if(is_array($this->sections_arr))
        $this->view->Set('sections',$this->sections_arr);
      else   
        $this->view->Set('sections',null);
      
      $left_menu = $this->view->Get('inc_navigator.tpl');
       
      $this->global_view->Set('left_menu',$left_menu); 
      
    } // -- __construct
    
    
    function getHtml(){
        return $this->html;
    }
    
    // [!] сделать, чтобы рендерился шаблон модуля и шаблон отдельно главный
    // попробовать взять смарти из реестра или создать второй объект
     
    
    
    
    
    public static function getInstance(){
    // [!] метод обязателен для каждого модуля
        if (!isset(self::$instance)) {
            $className = __CLASS__;
            self::$instance = new $className;
        }

        return self::$instance;
    } // --
    
    static function router($section_id){
         
        $modul = static::getInstance();
         
        switch($section_id){
            case 804: $modul->getNews(2012);
            break;
            case 806: $modul->getNews(2013);
            break;
            
            default:
            break;
        }
    } // --
    
    static function action(){
        //die(var_dump(__CLASS__));
        $obj = static::getInstance();
         
        $method = $obj->action;
        $obj->$method();  
        
        //die(var_dump($obj->action));
    } // --
    
 
   
    // -------- News ----------
    function actionNewsBasic(){ 
        $this->getNews( date('Y') );
         
        //$this->html = 'News basic';
        //$this->html =  $this->view->render();
    } // --
    
    function actionNewsShowNew(){
    // точка входа
        if(User::isAdmin()) $edit_link = ''; //TODO
        else $edit_link = '';
        
        $news_id = $this->getURIarg(2);
        
        $new = $this->model->getNew($news_id);
        
        $this->  view->Set('editLink',$edit_link);
        $this->  view->Set('new',$new); //fb($new);
        
         
        $this->html =  $this->view->render('New.tpl');
    
    }
    
    private function getNews($year){    
        //$year = 2012;
        
        $news = array();
    
        $action = $year;  
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action); 
    
        if($this->getURIarg(2) == 'edit' AND User::isAdmin())
        // управление разделом - вызов метода либо редирект на другую точку входа
         
          //$this->CreateTeacher(); 
          header("Location:/news/edit/$year");
        else {
          $this-> view->Set('action',$year);
          
          $news = $this->model->getNews($year);   
          
          // if(is_array($news )) //fb($news);
          $this-> view->Set('news',$news);
           
        
          $this->html =  $this->view->render();
        }
    } // --
    
    
    function actionNewsEdit(){ 
    // точка входа 
        
        if(!User::isAdmin()) return null;  
        
        $news = false;
        $year = $this->getURIarg(2);  
        
         $action = $year;
         $this-> view->Set('action',$action); 
         $this->  global_view->Set('navhigh',$action); 
         
         $sections_id = $this->model->getSectionIdByName($this->getURIarg(2));
          
         /*
        //
        $this-> view->Set('submitButtonName','Создать'); 
        $action = 'litsom-k-litsu';
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action);
        //
        
        $this->addJs('upload_files_ajax.js', $get_script_from_standard_dir = true); 
        $this->addJs('jquery.form.js', $get_script_from_standard_dir = true); 
        $this->addJs('jquery.blockUI.js', $get_script_from_standard_dir = true);          
         */
        $news = $this->model->getNews($action);
         
         
        $this-> view->Set('add_new_form_action','/'.MODUL_INDEX.'/AddNew/'.$sections_id); 
        $this-> view->Set('update_news_form_action','/'.MODUL_INDEX.'/UpdateNews/'.$sections_id); 
        $this-> view->Set('news',$news); 
        $this-> view->Set('year',$year); 
        
        $this->html =  $this->view->render('Edit.tpl');
        
    } // --
    
    function actionNewsAddNew(){ 
    // точка входа 
        if(!User::isAdmin()) return null; 
        
        if(!isset($_POST['new'])) return null;
        if(!is_array($_POST['new'])) return null;
        
        //TODO валидация
        $this->model->addNew($_POST['new']);
        
        header("Location:/".MODUL."/");
    } // --
    
    function actionNewsUpdateNews(){
    // точка входа 
    //TODO валидация
        if(!User::isAdmin()) return null;
        if(!isset($_POST)) return null;
        //fb($_POST); return;
         
        foreach($_POST['news'] as $news_id => $value){       

            if(isset($value['delete'])){
              $new = $this->model->getNew($news_id);  
              
              $prefix = $new['photo'];
              $file_1 = $prefix . '.jpg';
              $file_2 = 'sm_'.$prefix . '.jpg';
              
              @unlink(SITE . '../Image/news/' . $file_1);
              @unlink(SITE . '../Image/news/' . $file_2);
            
              $q = "DELETE FROM `news` WHERE news_id = {$news_id}";
              $r = mysql_query($q);
            } else {
            //TODO валидация
            /*
              $value['date_added'];
              $value['title'];
              $value['text'];
              $value['name'];
              $value['new_img'];
              $value['seolink'];
              $value['video']; 
            */ 
              
              
              // TODO move to model
              $q = "UPDATE `news` SET `title` = '{$value['title']}',
                                          `text` = '{$value['text']}', 
                                          `photo_name` = '{$value['name']}', 
                                          `seolink` = '{$value['seolink']}',
                                          `video` = '{$value['video']}' 
                    WHERE news_id = {$news_id}  ";
              $r = mysql_query($q);
              //fb($q);
              
               
            }
            header("Location:/".MODUL."/");
        }    
    
    } // --
    
    
    
    
    
    
    
    
    
    
    
    
}
